前一個章節我們介紹完利用 Iac (Infrastructure as Code,基礎設施即代碼)進行自動化的設定。
今天來分享 Compliance as Code,中文是合規即代碼,有的人也會簡稱為 CaC。
很多組織都會受到稽核/合規的要求,無論是來自於政府法規、行業標準,還是內部的安全政策。這些合規性要求不僅是確保組織運作的一個重要環節,也是保障數據安全和客戶信任的關鍵因素。
然而,面對快速變化的數位環境和不斷增長的合規性挑戰,傳統的手動合規性檢查和配置方法已經顯得不再足夠。在這種情況下,Compliance as Code(合規性即程式碼)嶄新地站在舞台中央,成為組織實現自動化合規性的重要工具。
Compliance as Code 的核心概念是將合規性要求轉化為可執行的程式碼,通過自動化來確保系統和應用程式在技術層面上符合相關的法規、標準和內部政策。這意味著合規性標準不再僅僅是一份文件,而是被實際地轉化為能夠自動執行的腳本、模板或配置。
這種自動化的方式不僅可以確保合規性的達成,還能夠為組織帶來一系列的好處。可以說是藍隊跟內部稽核的一大福音。
順道一提,Compliance as Code 也可以融入軟體安全開發的生命週期內,透過 Compliance as Code整合 DevOps 或 CI/CD 來達成持續合規。
Compliance as code 是一個相對新興的概念,隨著一些規範和法規對於數據隱私和安全的要求不斷提高,越來越多的技術、工具和平台出現在市場上。
但因為相對來說是比較新的概念,各家針對Compliance as code的說法與實作可能會有些微差異,也有許多 IaC 或 Policy as Code 被直接當成 Compliance as code 的作法,也有一些技術是本身可能就涵蓋多項的。
這邊我覺得,一個重點想法就是合規,如同其名,核心精神在於合規,組織想要符合或是遵守一些規範例,如 PCI-DSS、HIPAA、GDPR、 GedRAMP,資通安全法或是內部政策規範。透過 Compliance as Code 帶來了自動化和一致性,自動檢查配置,去檢查和確保組織的系統和應用程式始終符合合規性要求,保持一致的合規性標準。
快速響應是 Compliance as Code 的另一個關鍵好處。隨著合規性要求的變化和更新,組織可以迅速地更新相關的程式碼,確保系統在最短的時間內就能適應新的合規性要求,從而減少違規風險。
此外,Compliance as Code 還有助於減少風險。自動檢查合規性可以幫助組織及早識別可能的合規性違規問題,並採取適當的措施加以修復,從而降低遭受合規性違規的潛在風險。
在實作上要進行設定修補當然是沒問題,技術上都做得到,這邊只是補充一下,談到名詞定義的時候大家可能看法會有一些出入。Compliance as Code 其實你可以做到預防型、偵測型、修補型。
預防型就是我設定了某個服務的設定之後,其他人無法去更改。偵測型就是我們待會的範例,會去檢察系統上的設定是否符合我們的描述性語言。修補型就是透過自動或半自動去修補不符合規範的設定。通常談到 Compliance as Code,多數還是著墨於偵測型,但另外兩者也是有的。
在目前 DevOps 發展時代,組織需要不斷尋求創新的方式來應對合規性挑戰,Compliance as Code無疑是一個引人注目的方向,它在保障安全的同時也為組織帶來了更多的靈活性和效率。
講完理論,接下來是技術實作的部分
這邊選用的是 Chef InSepc
我認為是一個很典型標準的 Complance as Code 的工具
並且官方網站也是大大的打著 CaC 的口號 XD
相較之下有些其他工具,可能也會網路文章、書籍、研討會,作為分享說是 Complance as Code 的工具或服務,但它自己官方本身可能是有其他名稱。
https://community.chef.io/tools/chef-inspec
Chef InSepc 目前網路上教學資源不少,官方也有提供文件
https://github.com/inspec/inspec
https://docs.chef.io/inspec/
安裝上很方便
wget https://packages.chef.io/files/stable/inspec/4.37.8/ubuntu/18.04/inspec_4.37.8-1_amd64.deb
dpkg -i inspec_4.37.8-1_amd64.deb
inspec --help
安裝完成後我們可以透過 inspec 的指令直接對目標進行合規的檢查
至於要檢查甚麼項目,利用 exec 可以調用遠端 Github 的 reference
以下指令我是使用 linux-baseline 這個檢查規則
然後用 ssh 方式連線去檢查,所以要記得先配置好 ssh key
chef license accept 是表示你接受授權許可而已
inspec exec https://github.com/dev-sec/linux-baseline -t ssh://wazuh@192.168.101.141 -i ~/.ssh/id_rsa --chef-license accept
剛剛提到的一些合規標準Chef也有提供文件
例如我們想做到 PCIDSS 合規
可以參考以下
《Chef PCI DSS Compliance Guide》
https://www.chef.io/docs/cheflibraries/whitepapers/guidetopcidsscompliance.pdf
要使用 Chef InSpec 其實就要了解一下 Profile
Chef InSpec 支持創建複雜的測試和合規性配置文件,這些配置文件組織控件以支持依賴性管理和代碼重用。每個配置文件都是一個獨立的結構,具有自己的分發和執行流程。這個就是Profile
我們上面執行使用 exec 其實也是去抓 Github 上面的 Profile
所以也可以將 Profile 建立於本地端,然後指定位置去執行
examples/profile
├── README.md
├── controls
│ ├── example.rb
│ └── control_etc.rb
├── libraries
│ └── extension.rb
|── files
│ └── extras.conf
└── inspec.yml
Profile 中的 libraries 是可以使用已經寫好的資源擴充
官方有提供了非常多的資源!
https://docs.chef.io/inspec/resources/
這系列文章接近尾聲
這篇文章提到了一些合規的項目包含了 PCI-DSS、HIPAA、GDPR、 GedRAMP
大家有沒有覺得很熟悉?你是忘記了,還是不敢想起來
我們當初安裝跟使用 Wazuh 的時候,在 dashboard 的地方也會有看到合規性檢查的項目唷
大家可以回憶看看,或是回去玩看看就會注意到了
這幾天過於忙碌,沒辦法好好更充實今天內容有點可惜 QQ
上面的實作,應該是不會有問題
但我目前因為情況尷尬,沒辦法實作附上截圖
有機會的話之後會補上